/*
 * @Descripttion: 
 * @version: 
 * @Author: sueRimn
 * @Date: 2021-09-02 21:14:39
 * @LastEditors: sueRimn
 * @LastEditTime: 2021-09-05 15:16:30
 */
module.exports = (option, app) => {
  return async function errorHandler(ctx, next) {
    try {
      await next();
      // 404 处理
      if (ctx.status === 404 && !ctx.body) {
        app.emit("error", "404 错误,并检查请求类型~", ctx);
        ctx.body = {
          msg: "fail",
          data: "404 错误,并检查请求类型~",
        };
      }
    } catch (err) {
      // 记录一条错误日志
      app.emit("error", err, ctx);

      const status = err.status || 500;
      // 生产环境时 500 错误的详细错误内容不返回给客户端，因为可能包含敏感信息
      let error =
        status === 500 && app.config.env === "prod"
          ? "Internal Server Error"
          : err.message;
      // 参数验证异常
      if (status === 422 && err.message === "Validation Failed") {
        if (err.errors && Array.isArray(err.errors)) {
          error = err.errors[0].err[0] ? err.errors[0].err[0] : "参数错误";
        }else{
          error = "参数错误";
        }
      }

      if(status === 500 && err.message === "Validation error"){
        let aa = (((err.errors[0]).message).split(" "))[0]
        error = err.fields[aa];
      }
      // 从 error 对象上读出各个属性，设置到响应中
      ctx.body = {
        msg: "fail",
        data: error,
        status 
      };

      ctx.status = status;
    }
  };
};
